<?php

class CampaniaTareaProgramadaController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'admin';

    public function filters() {
        return array(
            array('CrugeAccessControlFilter'),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate($campania_id) {
        $model = new CampaniaTareaProgramada;
        $model->usuario_creacion_id = Yii::app()->user->id;
        $model->campania_id = $campania_id;
        if (Yii::app()->request->isAjaxRequest) {
            $result = array();
            //validación por ajax
            if (isset($_POST['ajax']) && $_POST['ajax'] === '#campania-tarea-programada-form') {
                $model->attributes = $_POST['CampaniaTareaProgramada'];
                $result['success'] = $model->validate();
                $result['errors'] = $model->errors;
                echo json_encode($result);
                Yii::app()->end();
            }
            if (isset($_POST['CampaniaTareaProgramada'])) {
                $model->attributes = $_POST['CampaniaTareaProgramada'];

                $model->fecha_accion = Util::FormatDate($model->fecha_accion, "Y-m-d");
                $result['success'] = $model->save();
                Actividad::model()->registrarActividad($model, Actividad::TIPO_CREATE);
                if ($model->todos == 0) {
                    $model->saveManyMany('campaniaClientesOwners', explode(',', $_POST['clientes']));
                }
                $result['campania_id'] = $model->campania_id;
                echo CJSON::encode($result);
            } else {
                $modelCampaniaOwner = new CampaniaClientesOwner('search');
                $modelCampaniaOwner->unsetAttributes();
                if (isset($_GET['search'])) {
                    $modelCampaniaOwner->campania_id = $campania_id;
                    $modelCampaniaOwner->attributes = $this->assignParams($_GET['search']);
                }
                $this->renderPartial('_form_modal', array(
                    'model' => $model,
                    'modelCampaniaOwner' => $modelCampaniaOwner
                        ), false, true);
            }
        }
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);
        $model->fecha_accion = Util::FormatDate($model->fecha_accion, "d/m/Y");
        if (Yii::app()->request->isAjaxRequest) {
            $result = array();
            //validación por ajax
            if (isset($_POST['ajax']) && $_POST['ajax'] === '#campania-tarea-programada-form') {
                $model->attributes = $_POST['CampaniaTareaProgramada'];
                $result['success'] = $model->validate();
                $result['errors'] = $model->errors;
                echo json_encode($result);
                Yii::app()->end();
            }
            if (isset($_POST['CampaniaTareaProgramada'])) {
                $model->attributes = $_POST['CampaniaTareaProgramada'];

                $model->fecha_accion = Util::FormatDate($model->fecha_accion, "Y-m-d");
                $result['success'] = $model->save();
                Actividad::model()->registrarActividad($model, Actividad::TIPO_UPDATE);
                if ($model->todos == 0) {
                    $model->saveManyMany('campaniaClientesOwners', explode(',', $_POST['clientes']));
                }
                $result['campania_id'] = $model->campania_id;
                echo CJSON::encode($result);
            } else {
                $modelCampaniaOwner = new CampaniaClientesOwner('search');
                $modelCampaniaOwner->unsetAttributes();
                if (isset($_GET['search'])) {
                    $modelCampaniaOwner->campania_id = $campania_id;
                    $modelCampaniaOwner->attributes = $this->assignParams($_GET['search']);
                }
                $this->renderPartial('_form_modal', array(
                    'model' => $model,
                    'modelCampaniaOwner' => $modelCampaniaOwner
                        ), false, true);
            }
        }
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            CampaniaTareaProgramada::model()->updateByPk($id, array('estado' => Campanias_Constants::TAREA_PROGRAMADA_ANULADO));
            $model = $this->loadModel($id);
            Actividad::model()->registrarActividad($model, Actividad::TIPO_DELETE);
            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new CampaniaTareaProgramada('search');
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['CampaniaTareaProgramada']))
            $model->attributes = $_GET['CampaniaTareaProgramada'];

        $this->render('admin', array(
            'model' => $model,
        ));
    }

    /*     * ********************funciones internas************************************** */

    public function actionEjecutarTareaProgramadaCronTab() {
        $fechaActual = explode(' ', Util::FechaActual());
        $fechaFin = $fechaActual[0];
        $horaFin = $fechaActual[1];
        $idTareas = CampaniaTareaProgramada::model()->getTaresProgramadas(Campanias_Constants::TAREA_PROGRAMADA_PENDIENTE, $fechaFin, $horaFin);
        if (!empty($idTareas)) {
            foreach ($idTareas as $id_tarea) {
                $tareasTemp = CampaniaTareaProgramada::model()->findByPk($id_tarea);
                //envio sms
                if ($tareasTemp->accion_tipo == Campanias_Constants::SMS) {
                    $this->saveSmsTareaProgramada($tareasTemp);
                } else if ($tareasTemp->accion_tipo == Campanias_Constants::EMAIL) {
                    if ($tareasTemp->medio_envio == Constants::MAIL_MANDRILL) {
                        $this->saveMandrillMailTareaProgramada($tareasTemp);
                    } elseif ($tareasTemp->medio_envio == Constants::MAIL_YIIMAILER) {
                        $this->saveYiiMailerMailTareaProgramada($tareasTemp);
                    }
                }
            }
        }
    }

    private function saveMandrillMailTareaProgramada($tareasTemp) {
        $campania = Campania::model()->findByPk($tareasTemp->campania_id);
        $id_user = 0;
        if ($tareasTemp->todos == 0) {
            $clientes = CampaniaTpHasCo::model()->getClientesTarea($tareasTemp->id, Campanias_Constants::EMAIL);
            foreach ($clientes as $contacto) {
                $model = new Mail();
                $model->contactos = 'tp';
                $model->medio_envio = Constants::MAIL_MANDRILL;
                $model->usuario_creacion_id = $id_user;
                $model->fecha_creacion = Util::FechaActual();
                $model->plantilla = $tareasTemp->template; //Guardamos el Nombre de la plantilla q Usamos de Mandrill
                if ($model->plantilla != null) {
                    $model->asunto = $model->plantilla;
                    $model->contenido = 'Template';
                }
                $model->contacto_id = $contacto['[id]'];
                $model->email = $contacto['[email_principal]'] != '' ? $contacto['[email_principal]'] : $contacto['[email_secundario]'];
                if ($model->save()) {
                    $registro_campaña = new CampaniaEntidad();
                    $registro_campaña->entidad_tipo = Campanias_Constants::EMAIL;
                    $registro_campaña->entidad_id = $model->id;
                    $registro_campaña->campania_id = $tareasTemp->campania_id;
                    $registro_campaña->save();
                    $content = array();
                    if ($campania->nosey_form_id) {
                        //cargo de link para responder a encuesta si la campania tiene una escuesta
                        $content = array(
                            array(
                                'name' => 'info',
                                'content' => '<h2><a style="color:#1967a5" href="' . Yii::app()->createAbsoluteUrl("nosey/encuesta/createEntidadAnswer", array('entidad_tipo' => Nosey_Util::encodeParam($campania->tableName()), 'entidad_id' => Nosey_Util::encodeParam($campania->id), 'contacto' => Nosey_Util::encodeParam($model->contacto_id), 'form_id' => Nosey_Util::encodeParam($campania->nosey_form_id), 'subentidad_tipo' => Nosey_Util::encodeParam($model->tableName()), 'subentidad_id' => Nosey_Util::encodeParam($model->id))) . '">test!</a></h2>'
                            )
                        );
                    }
                    $sendStatus = Constants::SEND_MAILS ? $this->sendMailMandrill($model, null, null, $content) : true;
                    if ($sendStatus) {
                        $model->fecha_envio = Util::FechaActual();
                        $model->estado = Mail::ESTADO_ENVIADO;
                        $model->save();
                        Actividad::registrarActividad($model, Actividad::TIPO_CREATE);
                    }
                }
            }
            $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
            $tareasTemp->save();
        } else {
            $limitIni = 0;
            $limitFin = Constants::BATCH_ACTION_EMAIL;
            $clientes = Contacto::model()->getContactosLotes($limitIni, $limitFin, "EMAIL", $tareasTemp->campania_id);
            while (!empty($clientes)) {
                foreach ($clientes as $contacto) {
                    $model = new Mail();
                    $model->contactos = 'tp';
                    $model->medio_envio = Constants::MAIL_MANDRILL;
                    $model->usuario_creacion_id = $id_user;
                    $model->fecha_creacion = Util::FechaActual();
                    $model->plantilla = $tareasTemp->template; //Guardamos el Nombre de la plantilla q Usamos de Mandrill
                    if ($model->plantilla != null) {
                        $model->asunto = $model->plantilla;
                        $model->contenido = 'Template';
                    }
                    $model->contacto_id = $contacto['[id]'];
                    $model->email = $contacto['[email_principal]'] != '' ? $contacto['[email_principal]'] : $contacto['[email_secundario]'];
                    if ($model->save()) {
                        $registro_campaña = new CampaniaEntidad();
                        $registro_campaña->entidad_tipo = Campanias_Constants::EMAIL;
                        $registro_campaña->entidad_id = $model->id;
                        $registro_campaña->campania_id = $tareasTemp->campania_id;
                        $registro_campaña->save();
                        $content = array();
                        if ($campania->nosey_form_id) {
                            //cargo de link para responder a encuesta si la campania tiene una escuesta
                            $content = array(
                                array(
                                    'name' => 'info',
                                    'content' => '<h2><a style="color:#1967a5" href="' . Yii::app()->createAbsoluteUrl("nosey/encuesta/createEntidadAnswer", array('entidad_tipo' => Nosey_Util::encodeParam($campania->tableName()), 'entidad_id' => Nosey_Util::encodeParam($campania->id), 'contacto' => Nosey_Util::encodeParam($model->contacto_id), 'form_id' => Nosey_Util::encodeParam($campania->nosey_form_id), 'subentidad_tipo' => Nosey_Util::encodeParam($model->tableName()), 'subentidad_id' => Nosey_Util::encodeParam($model->id))) . '">test!</a></h2>'
                                )
                            );
                        }
                        $sendStatus = Constants::SEND_MAILS ? $this->sendMailMandrill($model, null, null, $content) : true;
                        if ($sendStatus) {
                            $model->fecha_envio = Util::FechaActual();
                            $model->estado = Mail::ESTADO_ENVIADO;
                            $model->save();
                            Actividad::registrarActividad($model, Actividad::TIPO_CREATE);
                        }
                    }
                }
                $limitIni = $limitIni + $limitFin;
                $clientes = Contacto::model()->getContactosLotes($limitIni, $limitFin, "EMAIL", $tareasTemp->campania_id);
            }
            $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
            $tareasTemp->save();
        }
    }

    private function saveYiiMailerMailTareaProgramada($tareasTemp) {
        $asunto = MailAsunto::model()->findByPk($tareasTemp->motivo_id);
        $plantilla = MailPlantilla::model()->findByPk($tareasTemp->plantilla_id);
        $campania = Campania::model()->findByPk($tareasTemp->campania_id);
        $model = new Mail();
        $id_user = 0;
//        try {
//            $id_user = Yii::app()->user->id;
//        } catch (Exception $exc) {
////            echo $exc->getTraceAsString();
//            $id_user = 0;
//        }

        $model->asunto = $asunto->nombre;
        $model->medio_envio = Constants::MAIL_YIIMAILER;
        $model->asunto_id = $asunto->id;
        $model->plantilla_id = $plantilla->id;
        $contenido = $plantilla->mensaje;
        $model->usuario_creacion_id = $id_user;
        $model->fecha_creacion = Util::FechaActual();
        if ($tareasTemp->todos == 0) {
            $clientes = CampaniaTpHasCo::model()->getClientesTarea($tareasTemp->id, Campanias_Constants::EMAIL);
            $emailId = array();
            //arreglo de eleemntos a registrar
            $inserValues = array();
            foreach ($clientes as $contacto) {
                $model->contacto_id = $contacto['[id]'];
                $model->email = $contacto['[email_principal]'] != '' ? $contacto['[email_principal]'] : $contacto['[email_secundario]'];
                $model->contenido = str_replace(array_keys($contacto), array_values($contacto), $contenido);
                //agregar email
                array_push($emailId, $model->email);
                //agregar registro
                array_push($inserValues, $model->attributes);
            }
            //guardar los registros
            $idEmailToSend = Util::saveBulk($inserValues, $model->tableName()); // id de mail que se guardaron
            $insertEntidadCampania = array();
            $registro_campaña = new CampaniaEntidad();
            $registro_campaña->entidad_tipo = Campanias_Constants::EMAIL;
            $registro_campaña->campania_id = $campania->id;
            foreach ($idEmailToSend as $idEmail) {
                // se ejecuta para cuando viene selecionados contactos en campania
                $registro_campaña->entidad_id = $idEmail;
                array_push($insertEntidadCampania, $registro_campaña->attributes);
            }
            Util::saveBulk($insertEntidadCampania, $registro_campaña->tableName());
            if (!empty($idEmailToSend)) {
                try {
                    if (Constants::SEND_MAILS) {
                        $resultStatus = $this->sendBulkEmail($idEmailToSend, null, null);
                    } else {
                        Mail::model()->updateByPk($idEmailToSend, array("estado" => Mail::ESTADO_ENVIADO, "fecha_envio" => Util::FechaActual()));
                    }
                } catch (Exception $exc) {
                    
                }
                $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
                $tareasTemp->save();
            }
        } else {
            $limitIni = 0;
            $limitFin = Constants::BATCH_ACTION_EMAIL;
            $contactos = Contacto::model()->getContactosLotes($limitIni, $limitFin, "EMAIL", $tareasTemp->campania_id);
            while (!empty($contactos)) {
                $emailId = array();
                //arreglo de eleemntos a registrar
                $inserValues = array();
                foreach ($contactos as $contacto) {
                    $model->contacto_id = $contacto['[id]'];
                    $model->email = $contacto['[email_principal]'] != '' ? $contacto['[email_principal]'] : $contacto['[email_secundario]'];
                    $model->contenido = str_replace(array_keys($contacto), array_values($contacto), $contenido);
//                            //agregar email
                    array_push($emailId, $model->email);
                    //agregar registro
                    array_push($inserValues, $model->attributes);
                }
                //guardar los registros
                $idEmailToSend = Util::saveBulk($inserValues, $model->tableName()); // id de mail que se guardaron
                $insertEntidadCampania = array();
                $registro_campaña = new CampaniaEntidad();
                $registro_campaña->entidad_tipo = Campanias_Constants::EMAIL;
                $registro_campaña->campania_id = $campania->id;
                foreach ($idEmailToSend as $idEmail) {
                    // se ejecuta para cuando viene selecionados contactos en campania
                    $registro_campaña->entidad_id = $idEmail;
                    array_push($insertEntidadCampania, $registro_campaña->attributes);
                }
                Util::saveBulk($insertEntidadCampania, $registro_campaña->tableName());
                if (!empty($idEmailToSend)) {
                    try {
                        if (Constants::SEND_MAILS) {
                            $resultStatus = $this->sendBulkEmail($idEmailToSend, null, null);
                        } else {
                            Mail::model()->updateByPk($idEmailToSend, array("estado" => Mail::ESTADO_ENVIADO, "fecha_envio" => Util::FechaActual()));
                        }
                    } catch (Exception $exc) {
                        
                    }
                }
                $limitIni = $limitIni + $limitFin;
                $contactos = Contacto::model()->getContactosLotes($limitIni, $limitFin, "EMAIL", $tareasTemp->campania_id);
            }
            $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
            $tareasTemp->save();
        }
    }

    /**
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * gestin para el registro de mensajes en tareas programadas
     * @param type $tareasTemp
     */
    private function saveSmsTareaProgramada($tareasTemp) {

        $motivo = new SmsMotivo();
        $motivo = $motivo->findByPk($tareasTemp->motivo_id);
        $Plantilla = new SmsPlantilla();
        $Plantilla = $Plantilla->findByPk($tareasTemp->plantilla_id);
        $id_user = 0;
        if ($tareasTemp->todos == 0) {
            $clientes = CampaniaTpHasCo::model()->getClientesTarea($tareasTemp->id, Campanias_Constants::SMS);
            $sms = new Sms();
            $sms->contactos = 'Tp';
            $sms->motivo_id = $motivo->id;
            $sms->plantilla_id = $Plantilla->id;
            $mensaje = $Plantilla->mensaje;
            $sms->estado = Sms::ESTADO_PENDIENTE;
            $sms->usuario_creacion_id = $id_user;
            $sms->fecha_creacion = Util::FechaActual();
            //array de modelos
            $inserValues = array();
            $smsIds = array();
            $meMensajes = array();
            foreach ($clientes as $contacto) {
                $sms->contacto_id = $contacto['[id]'];
                $sms->usuario_creacion_id = $id_user;
                $sms->mensaje = str_replace(array_keys($contacto), array_values($contacto), $mensaje);
                //agregar email
                array_push($smsIds, $contacto['[celular]']);
                //lista de mensajes a enviar.
                array_push($meMensajes, array(
                    //número celular
                    'meDestinatario' => $contacto['[celular]'],
                    //mensaje
                    'meMensaje' => $sms->mensaje
                        )
                );
                //agregar registro
                array_push($inserValues, $sms->attributes);
            }
            $idSmsToSend = Util::saveBulk($inserValues, $sms->tableName());
            Actividad::registrarActividad($sms, Actividad::TIPO_CREATE);
            $smsIds = array_combine($smsIds, $idSmsToSend);
            if (!empty($idSmsToSend)) {
                try {
                    //constante de produccion para el envio de sms
                    if (Constants::SEND_SMS) {
                        $this->envioSms($meMensajes, $smsIds);
                    } else {
                        Sms::model()->updateByPk($idSmsToSend, array("estado" => SMS::ESTADO_ENVIADO, "fecha_envio" => Util::FechaActual()));
                    }
                } catch (Exception $exc) {
                    
                }
            }
            $SmsCampaniaEntidad = array();
            $modelCE0 = new CampaniaEntidad;
            $modelCE0->entidad_tipo = Campanias_Constants::SMS;
            $modelCE0->campania_id = $tareasTemp->campania_id;
            foreach ($idSmsToSend as $smsIdCamp) {
                $modelCE0->entidad_id = $smsIdCamp;
                array_push($SmsCampaniaEntidad, $modelCE0->attributes);
            }
            Util::saveBulk($SmsCampaniaEntidad, $modelCE0->tableName());
            $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
            $tareasTemp->save();
        } else {
            $limitIni = 0;
            $limitFin = Constants::BATCH_ACTION_SMS;
            $clientes = Contacto::model()->getContactosLotes($limitIni, $limitFin, "SMS", $tareasTemp->campania_id);
            $sms = new Sms();
            $sms->contactos = 'Tp';
            $sms->motivo_id = $motivo->id;
            $sms->plantilla_id = $Plantilla->id;
            $mensaje = $Plantilla->mensaje;
            $sms->estado = Sms::ESTADO_PENDIENTE;
            $sms->usuario_creacion_id = $id_user;
            $sms->fecha_creacion = Util::FechaActual();
            while (!empty($clientes)) {
                $inserValues = array();
                $smsIds = array();
                $meMensajes = array();
                foreach ($clientes as $contacto) {
                    $sms->contacto_id = $contacto['[id]'];
                    $sms->usuario_creacion_id = $id_user;
                    $sms->mensaje = str_replace(array_keys($contacto), array_values($contacto), $mensaje);
                    //agregar email
                    array_push($smsIds, $contacto['[celular]']);
                    //lista de mensajes a enviar.
                    array_push($meMensajes, array(
                        //número celular
                        'meDestinatario' => $contacto['[celular]'],
                        //mensaje
                        'meMensaje' => $sms->mensaje
                            )
                    );
                    //agregar registro
                    array_push($inserValues, $sms->attributes);
                }
                $idSmsToSend = Util::saveBulk($inserValues, $sms->tableName());
                $actividad = new Actividad();
                $actividad->registrarActividad($sms, Actividad::TIPO_CREATE);
                $smsIds = array_combine($smsIds, $idSmsToSend);
                if (!empty($idSmsToSend)) {
                    try {
                        //constante de produccion para el envio de sms
                        if (Constants::SEND_SMS) {
                            $this->envioSms($meMensajes, $smsIds);
                        } else {
                            Sms::model()->updateByPk($idSmsToSend, array("estado" => SMS::ESTADO_ENVIADO, "fecha_envio" => Util::FechaActual()));
                        }
                    } catch (Exception $exc) {
                        
                    }
                }
                $SmsCampaniaEntidad = array();
                $modelCE0 = new CampaniaEntidad;
                $modelCE0->entidad_tipo = Campanias_Constants::SMS;
                $modelCE0->campania_id = $tareasTemp->campania_id;
                foreach ($idSmsToSend as $smsIdCamp) {
                    $modelCE0->entidad_id = $smsIdCamp;
                    array_push($SmsCampaniaEntidad, $modelCE0->attributes);
                }
                Util::saveBulk($SmsCampaniaEntidad, $modelCE0->tableName());
                $limitIni = $limitIni + $limitFin;
                $clientes = Contacto::model()->getContactosLotes($limitIni, $limitFin, "SMS", $tareasTemp->campania_id);
            }
            $tareasTemp->estado = Campanias_Constants::TAREA_PROGRAMADA_REALIZADO;
            $tareasTemp->save();
        }
    }

    private function sendBulkEmail($idMail, $att = null, $imgatt = null) {
        $mail = new YiiMailer();
        /* Configuracion para el Envio de Mails */
        $mail->Timeout = 3000;
        $mail->IsSMTP();
        $mail->SMTPAuth = true;
        $mail->CharSet = 'UTF-8';
        $mail->Host = 'smtp.gmail.com:465';
        $mail->SMTPSecure = "ssl";
        $mail->IsHTML(true);
        $mail->Username = 'info@tradesystem.com.ec';
        $mail->Password = 'info2k2013';

        $mail->clearLayout(); //if layout is already set in config
        $mail->setFrom('info@tradesystem.com.ec', 'Info');
        $no_enviados = array();
        $si_enviados = array();
        foreach ($idMail as $id) {
            $email = Mail::model()->findByPk($id);
            try {
                $mail->setTo($email->email);
                $mail->setSubject($email->asunto);
                $mail->setBody($email->contenido, 'text/html');
//            var_dump($imgatt);
//            var_dump($att);
//            $mail->setAttachment($imgatt); //Añadimos como adjunto la Imagen q nos envio por la variable $imgatt
                $mail->setAttachment('http://localhost/TruuloCRM/uploads/mail_upload/e143b27b51886fddcb119339deeeaa31.jpg'); //Añadimos como adjunto la Imagen q nos envio por la variable $imgatt
                $mail->setAttachment($att); //Añadimos al mail como adjunto el Archivo q nos envia por la variable $att
                /* Envia el Mail */
                $mail->send();
                //Actualizar el estado del mail
                $email->fecha_envio = Util::FechaActual();
                $email->estado = Mail::ESTADO_ENVIADO;
                $email->save();
                array_push($si_enviados, $email->email);
                // Crear registro de actividad
                Actividad::registrarActividad($email, Actividad::TIPO_CREATE);
                $_SESSION['attm'] = null;
                $_SESSION['imgattm'] = null;
            } catch (Exception $ex) {
                $email->estado = Mail::ESTADO_NO_ENVIADO;
                $email->save();
                $_SESSION['attm'] = null;
                $_SESSION['imgattm'] = null;
                array_push($no_enviados, $email->email);
            }
        }
        return array('si_enviados' => $si_enviados, 'no_enviados' => $no_enviados);
    }

    private function sendMailMandrill($email, $att = null, $imgatt = null, $template_content_mail = null) {
        try {
            $mandrill = new Mandrill(Constants::KEY_MANDRILLAPP);
            //$list_templates = $mandrill->templates->getList();
//             $template_name='';
//             $template_content='';
            $mandrillTemplate = false;
            if (!$email->plantilla == '') {
//                var_dump('nSI entra if');
//                die();
                $mandrillTemplate = true;

                $template_name = $email->plantilla;
                /* Remplaso contenido de template con links a vistas */
                $template_content = isset($template_content_mail) ? $template_content_mail : array();
            }
            $message = array(
                'html' => $email->contenido, //'<p>Example HTML content</p>',
                // 'text' => 'Example text content',
                'subject' => $email->asunto, //'example subject',
                'from_email' => 'no-reply@truulo.com',
                'from_name' => 'Example Name', /* TODO:FIJAR NOMBRE DE ENVIO */
                'to' => array(
                    array(
                        'email' => $email->email, //'decheverria@tradesystem.com.ec',
                        'name' => 'Recipient Name',
                        'type' => 'to'
                    )
                ),
                'headers' => array('Reply-To' => 'message.reply@example.com'),
                'important' => false,
                'track_opens' => null,
                'track_clicks' => null,
                'auto_text' => null,
                'auto_html' => null,
                'inline_css' => null,
                'url_strip_qs' => null,
                'preserve_recipients' => null,
                'view_content_link' => null,
                //'bcc_address' => 'message.bcc_address@example.com',
                'tracking_domain' => null,
                'signing_domain' => null,
                'return_path_domain' => null,
                'merge' => true,
                'global_merge_vars' => array(
                    array(
                        'name' => 'merge1',
                        'content' => 'merge1 content'
                    )
                ),
                'merge_vars' => array(
                    array(
                        'rcpt' => 'recipient.email@example.com',
                        'vars' => array(
                            array(
                                'name' => 'merge2',
                                'content' => 'merge2 content'
                            )
                        )
                    )
                ),
            );

            $result = ($mandrillTemplate) ? $mandrill->messages->sendTemplate($template_name, $template_content, $message) : $mandrill->messages->send($message);
            //print_r($result[0]['status']);
            $email->fecha_envio = date('Y-m-d H:i:s');
            $email->estado = Mail::ESTADO_ENVIADO;
            $email->save();
//            var_dump($result);
//            die();
            return $result;
//            if(!$email->save()){
//                var_dump($email);die();
//            }else{
//                return $result ;
//                var_dump('Guardado');
//            }
            // Crear registro de actividad
            Actividad::registrarActividad($email, Actividad::TIPO_CREATE);
        } catch (Mandrill_Error $e) {
            // Mandrill errors are thrown as exceptions
            echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
            // A mandrill error occurred: Mandrill_Invalid_Key - Invalid API key
            throw $e;
        }
    }

    /**
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * Método de gestion de envio de sms 
     * @param type $meMensajes lista de mensajes a envia
     * 
     * @param type $smsIds lista de registros guardados con estado pendiente.
     * ejemplo: array($numeroCelular => $idRegistroSMS)
     */
    public function envioSms($meMensajes, $smsIds) {
//envio del bloque de sms, recuperando el objeto de respuesta.
        $objEclipsoft = EclipsoftSmsWS::enviarBulkSMS($meMensajes);
//validar si el envío tiene errores 
        if ($objEclipsoft->EnviarBulkSMSResult->reNumErrores != 0) {
//obtener errores del envío
            $meErrores = $objEclipsoft->EnviarBulkSMSResult->reErrores->SErrores;
//cargar de numeros con error en el envío
            $numerosError = array();
            foreach ($meErrores as $error) {
                if (array_key_exists('reDestinatario', $error)) {
                    foreach ($error as $key => $value) {
                        if ($key == 'reDestinatario') {
                            $numerosError[] = $value;
                        }
                    }
                }
            }
//Cambio de estado de los sms registrados
            if (!empty($numerosError)) {
                foreach ($smsIds as $num => $id) {
//verificar si el numerto tiene error
                    if (in_array($num, $numerosError)) {
//cambiar estado a no enviado.
                        Sms::model()->updateByPk($id, array('estado' => SMS::ESTADO_NO_ENVIADO));
                    } else {
//cambiar estado a enviado.
                        Sms::model()->updateByPk($id, array('estado' => SMS::ESTADO_ENVIADO, 'fecha_envio' => Util::FechaActual()));
                    }
                }
            } else {
//marcar todos los mensajes como no enviados por problemas con el servidor
                Sms::model()->updateByPk(array_values($smsIds), array("estado" => SMS::ESTADO_NO_ENVIADO));
            }
        } else {
//cambio de estado de todos los sms de la lista a enviados, por no tener errores en el envio
            Sms::model()->updateByPk(array_values($smsIds), array("estado" => SMS::ESTADO_ENVIADO, "fecha_envio" => Util::FechaActual()));
        }
    }

    public function assignParams($params) {
        $result = array();
        if ($params['filters'][0] == 'all') {
            foreach (CampaniaClientesOwner::model()->searchParams() as $param) {
                $result[$param] = $params['value'];
            }
        } else {
            foreach ($params['filters'] as $param) {
                $result[$param] = $params['value'];
            }
        }
        return $result;
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = CampaniaTareaProgramada::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'campania-tarea-programada-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /*     * ********************************Funciones ajax*************************************** */

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * accion para la carga de los tipos de medios de envios.
     */
    public function actionAjaxGetMediosEnvio() {
        $mediosEnvio = NULL;
        if ($_POST['accion_tipo'] == Campanias_Constants::SMS) {
            //medios de envio sms
            $mediosEnvio = Constants::$mediosEnvioSms;
        } else {
            //medios envio mails
            $mediosEnvio = Constants::$codigoMail;
        }
        if ($mediosEnvio) {
            echo CHtml::tag('option', array('value' => ''), "- Seleccione -", true);
            foreach ($mediosEnvio as $medio) {
                echo CHtml::tag('option', array('value' => $medio['nombre']), $medio['nombre'], true);
            }
        }
    }

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * retorna los templates de la api de mandrill
     */
    public function actionAjaxGetTemplatesMandrill() {
        if (Yii::app()->request->isAjaxRequest) {
            $templates = Util::getTemplatesMandrill();
            if ($templates) {
                echo CHtml::tag('option', array('value' => ''), CHtml::encode('- Seleccione -'), true);
                foreach ($templates as $key => $value) {
                    echo CHtml::tag('option', array('value' => $value), CHtml::encode($value), true);
                }
            } else {
                echo CHtml::tag('option', array('value' => ''), CHtml::encode('- No existen templates -'), true);
            }
        }
    }

}
